#pragma once

#include <iostream>
#include "Grid.hpp"
#include "Blocks.hpp"

class Game
{
public:
    Game();

    ~Game();

    bool Initialize(const std::string& build_path);

    void Draw();//画俄罗斯方块

    void HandleInput();//处理上下左右尖键

    bool GameOver = false;//用于判断游戏是否结束

    Music music;//Music是音乐类型（来自内存的文件流）

    int score;//分数

    void MoveBlockDown();//向下移动，每向下移动，加一次分数，鼓励冒险

private:
    void MoveBlockLeft();//左移动

    void MoveBlockRight();//右移动
    
    void RotateBlock();//改变形状

    void LockBlock();//当已经到达终点，锁定，判断能否消掉，加分数

    const std::vector<Block>& GetAllBlocks();

    void UpdateScore(unsigned int LinesClear,unsigned DownPoints);

    bool IsOutGridSize();//是否超出网盘的边界

    bool BlockFits();//判断移动后的俄罗斯方块是否跟以前的方块重叠

    const Block& GetRandomBlock();//获取下一个随机方块

    void reset();

private:
    Block currentBlock;
    Block nextBlock;
    Sound rotateSound;//Sound是基本声源和缓冲区
    Sound clearSound;
    Grid grid;
};



